﻿package gui;
import java.awt.*;
import Source.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import XML.*;
import java.io.*;

public class NewTaskWindow extends javax.swing.JFrame {

    private DataXmlList journal;
    private Object mainThread;
    private ListTaskTableModel model;
    public String action="none";//строчка выбраного действия у новой задачи
    private int ID;
    
    /*
     * Инициализация нового окна, который автоматически 
     * запишет добавляемую задачу через xml метод add
     */
    public NewTaskWindow(DataXmlList XML,Object th,ListTaskTableModel model) {
        this.model=model;
        journal=XML;
        mainThread=th;        
        //дальнейшая инициализация окна

        initComponents(); //отображение элементов интерфейса
        this.setVisible(true);
        this.setIconImage(getToolkit().getImage("add_logo.png"));
        setResizable(false);
        setTitle("Создание новой задачи");
        //получаем середину экрана для отображения
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        this.setBounds((int)(screenSize.getWidth()/2)-200, (int)(screenSize.getHeight()/2)-155, 400, 310);
    
        //добавление массивов для отображения
        MinutChoise.setMaximum(59);
        MinutChoise.setMinimum(00);
        MinutChoise.setValue(10);
        HourChoise.setMaximum(23);
        HourChoise.setMinimum(00);
        HourChoise.setValue(10);
    } //инициализация окна
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        buttonGroup = new javax.swing.ButtonGroup();
        jScrollPane1 = new javax.swing.JScrollPane();
        context = new javax.swing.JTextArea();
        buttonOk = new javax.swing.JButton();
        buttonExit = new javax.swing.JButton();
        name = new javax.swing.JTextField();
        contacts = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        ActionChoiseInfo = new javax.swing.JLabel();
        jRadioButtonOpen = new javax.swing.JRadioButton();
        jRadioButtonClose = new javax.swing.JRadioButton();
        jRadioButtonNone = new javax.swing.JRadioButton();
        jCalendar1 = new com.toedter.calendar.JCalendar();
        MinutChoise = new com.toedter.components.JSpinField();
        HourChoise = new com.toedter.components.JSpinField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Создание новой задачи");
        setBackground(new java.awt.Color(240, 240, 221));
        setMinimumSize(new java.awt.Dimension(400, 300));
        setName("NewTaskWindow"); // NOI18N
        setResizable(false);

        context.setColumns(20);
        context.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N
        context.setLineWrap(true);
        context.setRows(5);
        context.setText("Постарайтесь кратко описать планируемую задачу...");
        context.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                contextFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                contextFocusLost(evt);
            }
        });
        jScrollPane1.setViewportView(context);

        buttonOk.setText("ОК");
        buttonOk.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonOkActionPerformed(evt);
            }
        });

        buttonExit.setText("Отмена");
        buttonExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonExitActionPerformed(evt);
            }
        });

        name.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        name.setText("Название задачи...");
        name.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        name.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                nameFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                nameFocusLost(evt);
            }
        });

        contacts.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        contacts.setText("Особые заметки к задаче...");
        contacts.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        contacts.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                contactsFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                contactsFocusLost(evt);
            }
        });

        jLabel1.setText("Время");

        ActionChoiseInfo.setText("Дополнительно:");

        buttonGroup.add(jRadioButtonOpen);
        jRadioButtonOpen.setText("Открыть программу");
        jRadioButtonOpen.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jRadioButtonOpenMouseClicked(evt);
            }
        });

        buttonGroup.add(jRadioButtonClose);
        jRadioButtonClose.setText("Закрыть процесс");
        jRadioButtonClose.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jRadioButtonCloseMouseClicked(evt);
            }
        });

        buttonGroup.add(jRadioButtonNone);
        jRadioButtonNone.setSelected(true);
        jRadioButtonNone.setText("Ничего не делать");
        jRadioButtonNone.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jRadioButtonNoneMouseClicked(evt);
            }
        });

        MinutChoise.setPreferredSize(new java.awt.Dimension(40, 20));

        HourChoise.setPreferredSize(new java.awt.Dimension(40, 20));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(name)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 232, Short.MAX_VALUE)
                            .addComponent(contacts))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jCalendar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(10, 10, 10)
                                .addComponent(jLabel1)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(HourChoise, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(MinutChoise, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(ActionChoiseInfo)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jRadioButtonOpen)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(buttonOk)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(buttonExit))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jRadioButtonClose)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jRadioButtonNone)))))
                        .addGap(0, 0, Short.MAX_VALUE))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(name, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jCalendar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(contacts, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel1))
                    .addComponent(MinutChoise, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(HourChoise, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(ActionChoiseInfo)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jRadioButtonOpen)
                    .addComponent(jRadioButtonClose)
                    .addComponent(jRadioButtonNone))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(buttonOk)
                    .addComponent(buttonExit))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    //действия при нажатии на выход
    private void buttonExitActionPerformed(java.awt.event.ActionEvent evt) {                                           
        setVisible(false);
        dispose();
    }                                          
//при нажатии на текстовое поле
    private void nameFocusGained(java.awt.event.FocusEvent evt) {                                 
        if(name.getText().equalsIgnoreCase("Название задачи...")){
            name.setText("");
        }
    }                                
//при снятии нажатия
    private void nameFocusLost(java.awt.event.FocusEvent evt) {                               
        if(name.getText().equalsIgnoreCase("")){
            name.setText("Название задачи...");
        }
    }                              

    private void contextFocusGained(java.awt.event.FocusEvent evt) {                                    
        if(context.getText().equalsIgnoreCase("Постарайтесь кратко описать планируемую задачу...")){
            context.setText("");
        }
    }                                   

    private void contextFocusLost(java.awt.event.FocusEvent evt) {                                  
        if(context.getText().equalsIgnoreCase("")){
            context.setText("Постарайтесь кратко описать планируемую задачу...");
        }
    }                                 

    private void contactsFocusGained(java.awt.event.FocusEvent evt) {                                     
        if(contacts.getText().equalsIgnoreCase("Особые заметки к задаче...")){
            contacts.setText("");
        }
    }                                    

    private void contactsFocusLost(java.awt.event.FocusEvent evt) {                                   
        if(contacts.getText().equalsIgnoreCase("")){
            contacts.setText("Особые заметки к задаче...");
        }
    }                                  
//нажатие на кнопку ок
    private void buttonOkActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if(name.getText().equalsIgnoreCase("Название задачи...")){
            JOptionPane.showMessageDialog(null, "Ошибка, у задачи должно быть имя!", "Ошибка", JOptionPane.ERROR_MESSAGE);
        }else{
            java.util.Date choisenDate=jCalendar1.getDate(); //выбранная дата
            java.util.Date today=new java.util.Date(); //берем сегодняшнюю дату для сравнения
            
            //добавляем к выбранной дате время выполнения задачи
            choisenDate.setHours(HourChoise.getValue());
            choisenDate.setMinutes(MinutChoise.getValue());
            
            if(today.compareTo(choisenDate)==1){//выбрана дата меньше сегодняшней
                JOptionPane.showMessageDialog(null, "Ошибка, время задачи не может быть меньше сегодняшней даты!", "Ошибка", JOptionPane.ERROR_MESSAGE);
                return;
            }
            //У нас есть уже корректное Время задачи, получаем название и другую информацию
            String contextString,contactsString;
            if(context.getText().equalsIgnoreCase("Постарайтесь кратко описать планируемую задачу...")){//нету контекста задачи
                contextString="none";
            }else{
               contextString=context.getText();
            }
            if(contacts.getText().equalsIgnoreCase("Особые заметки к задаче...")){
                contactsString="none";
            }else{//java listener;
                contactsString=contacts.getText();
            }     
            
            //создаем новую задачу
            //шаблон Task( String name,String action,String context,String contacts, Date d)
            Task addedTask=new Task(name.getText(),action,contextString,contactsString,choisenDate);
            Task threadingTask=journal.getEarliestTask();
            model.getList().add(addedTask);
            model.fireTableStructureChanged();
            if(threadingTask==null){
                synchronized(mainThread){
                mainThread.notifyAll();
                }
            }else if(addedTask.getDate().getTime()<threadingTask.getDate().getTime()){
                threadingTask.interrupt();
                synchronized(mainThread){
                mainThread.notifyAll();
                }
            }
            setVisible(false);
            dispose();
        }
    }                                        

    //нажали на радиокнопку открытия нового приложения
    private void jRadioButtonOpenMouseClicked(java.awt.event.MouseEvent evt) {                                              
        JFileChooser fileChooser = new JFileChooser();
        int ret = fileChooser.showDialog(this, "Выберите файл");
        if (ret == JFileChooser.APPROVE_OPTION) {
            File f = fileChooser.getSelectedFile();
            ActionChoiseInfo.setText("Дополнительно: Открыть программу "+f.getName());
                action="cmd.exe /c start "+f.getAbsolutePath();
		//Process p = Runtime.getRuntime().exec("cmd.exe /c start "+f.getAbsolutePath());
	}else{//не выбрали файл
            jRadioButtonNone.setSelected(true);
        }
    }                                             

    //нажали на радиокнопку закрытия процесса
    private void jRadioButtonCloseMouseClicked(java.awt.event.MouseEvent evt) {                                               
        //new ProcessTaskList(action);
        ActionChoiseInfo.setText("Дополнительно: Закрыть процесс ");
        
    }                                              

    private void jRadioButtonNoneMouseClicked(java.awt.event.MouseEvent evt) {                                              
        action="none";
        ActionChoiseInfo.setText("Дополнительно:");
    }                                             

    // Variables declaration - do not modify                     
    private javax.swing.JLabel ActionChoiseInfo;
    private com.toedter.components.JSpinField HourChoise;
    private com.toedter.components.JSpinField MinutChoise;
    private javax.swing.JButton buttonExit;
    private javax.swing.ButtonGroup buttonGroup;
    private javax.swing.JButton buttonOk;
    private javax.swing.JTextField contacts;
    private javax.swing.JTextArea context;
    private com.toedter.calendar.JCalendar jCalendar1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JRadioButton jRadioButtonClose;
    private javax.swing.JRadioButton jRadioButtonNone;
    private javax.swing.JRadioButton jRadioButtonOpen;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField name;
    // End of variables declaration                   
}